package com.guardchina.framework.util.utils;

import java.util.Calendar;

/**
 * 描述
 *
 * @author lwb
 * @since 2020/1/15
 */
public class IdCardUtil {
    /**
     * 根据身份证号获取年龄
     * @param certId
     * @return
     */
    public static Integer getAgeByCertId(String certId) {
        String birthday = certId.substring(6, 10) + "-"
                    + certId.substring(10, 12) + "-"
                    + certId.substring(12, 14);

        return getAgeFromBirthTime(birthday);
    }

    /**
     * 根据年月日计算年龄,birthTimeString:"1994-11-14"
     * @param birthTimeString:出生年月日
     * @return int
     * @date  2019/10/29 11:33 create by daining
     */
    public static Integer getAgeFromBirthTime(String birthTimeString) {
        // 先截取到字符串中的年、月、日
        String sirs[] = birthTimeString.trim().split("-");
        int selectYear = Integer.parseInt(sirs[0]);
        int selectMonth = Integer.parseInt(sirs[1]);
        int selectDay = Integer.parseInt(sirs[2]);
        // 得到当前时间的年、月、日
        Calendar cal = Calendar.getInstance();
        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH) + 1;
        int dayNow = cal.get(Calendar.DATE);

        // 用当前年月日减去生日年月日
        int yearMinus = yearNow - selectYear;
        int monthMinus = monthNow - selectMonth;
        int dayMinus = dayNow - selectDay;
        // 先大致赋值
        int age = yearMinus;
        // 选了未来的年份
        if (yearMinus < 0) {
            age = 0;
            // 同年的，要么为1，要么为0
        } else if (yearMinus == 0) {
            // 选了未来的月份
            if (monthMinus < 0) {
                age = 0;
                // 同月份的
            } else if (monthMinus == 0) {
                // 选了未来的日期
                if (dayMinus < 0) {
                    age = 0;
                } else if (dayMinus >= 0) {
                    age = 1;
                }
            } else if (monthMinus > 0) {
                age = 1;
            }
        } else if (yearMinus>0) {
            // 当前月>生日月
            if (monthMinus < 0) {
                // 同月份的，再根据日期计算年龄
            } else if (monthMinus == 0) {
                if (dayMinus < 0) {
                } else if (dayMinus >= 0) {
                    age = age + 1;
                }
            } else if (monthMinus > 0) {
                age = age + 1;
            }
        }
        return age;
    }
}
